package com.mofro.core;

import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.Before;

import com.mofro.jdbc.DatabaseObjectManager;
import com.mofro.mock.Mock;
import com.mofro.sql.builder.impl.OracleSqlConverter;

/**
 * <p> Clase de la que deberan extender los Test que quieran utilizar la funcionalidad de Mofro.
 *
 * @author sgianazz
 */
public class MofroBaseTest {

	private OracleSqlConverter conv = new OracleSqlConverter();
    private List<Mock> objectsMocks = new ArrayList<Mock>();

    @Before
    public void setUp() throws MofroException {
    	
    }

    @After
    public void tearDown() throws MofroException {
        dropObjects();
    }

    public void addNewObjectMock(final Mock mock) {
        objectsMocks.add(mock);
    }

    /**
     * <p> M&eacute;todo encargado de la eliminaci&oacute;n de objetos mocks de la base de datos.
     */
    private void dropObjects() throws MofroException {
    	for (Mock mock : objectsMocks) {
			String sql = conv.getDropSql(mock);
			DatabaseObjectManager.executeImmediate(mock.getSchemaName(), sql);
    	}
    }

    /**
     * <p> M&eacute;todo encargado de la creaci&oacute;n de objetos mocks en la base de datos.
     * 
     * @exception MofroException Por errores de conexion con la base de datos.
     */
    public void replay() throws MofroException {
    	for (Mock mock : objectsMocks) {
			String sql = conv.getCreateSql(mock);
			DatabaseObjectManager.executeImmediate(mock.getSchemaName(), sql);
		}
    }
}
